package com.yjhb.android.sbz.mvp;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonObject;
import com.yjhb.android.sbz.entity.AdBanner;
import com.yjhb.android.sbz.entity.AddTask;
import com.yjhb.android.sbz.entity.AppPayParam;
import com.yjhb.android.sbz.entity.AppVersion;
import com.yjhb.android.sbz.entity.BatchCheck;
import com.yjhb.android.sbz.entity.BiddingUser;
import com.yjhb.android.sbz.entity.CheckEntity;
import com.yjhb.android.sbz.entity.CheckResult;
import com.yjhb.android.sbz.entity.ClockInfo;
import com.yjhb.android.sbz.entity.ClockRecord;
import com.yjhb.android.sbz.entity.Comment;
import com.yjhb.android.sbz.entity.EverydayWelfare;
import com.yjhb.android.sbz.entity.Flush;
import com.yjhb.android.sbz.entity.FlushRecord;
import com.yjhb.android.sbz.entity.Follow;
import com.yjhb.android.sbz.entity.FriendMoney;
import com.yjhb.android.sbz.entity.Game;
import com.yjhb.android.sbz.entity.LevelUser;
import com.yjhb.android.sbz.entity.ManagerTask;
import com.yjhb.android.sbz.entity.MyTask;
import com.yjhb.android.sbz.entity.NewcomerState;
import com.yjhb.android.sbz.entity.Order;
import com.yjhb.android.sbz.entity.PutBidResult;
import com.yjhb.android.sbz.entity.RedPackDetails;
import com.yjhb.android.sbz.entity.RedPackItem;
import com.yjhb.android.sbz.entity.Report;
import com.yjhb.android.sbz.entity.ReputationDetailed;
import com.yjhb.android.sbz.entity.ResultSet;
import com.yjhb.android.sbz.entity.ShopInfo;
import com.yjhb.android.sbz.entity.Subject;
import com.yjhb.android.sbz.entity.SystemAnnouncement;
import com.yjhb.android.sbz.entity.Task;
import com.yjhb.android.sbz.entity.TaskInfo;
import com.yjhb.android.sbz.entity.TaskOrder;
import com.yjhb.android.sbz.entity.Timer;
import com.yjhb.android.sbz.entity.TodayClockParam;
import com.yjhb.android.sbz.entity.UserBehavior;
import com.yjhb.android.sbz.entity.UserFollow;
import com.yjhb.android.sbz.entity.UserInfo;
import com.yjhb.android.sbz.entity.Violation;
import com.yjhb.android.sbz.entity.reward.Reward;
import com.jojo.android.zxlib.entity.Result;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.annotations.Nullable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * 创建者 zx
 * 创建时间 2020/11/16 18:04
 */
public interface ServiceApi {

    @POST("download/test")
    Observable<Result<String>> test();

    /**
     * 微信登录
     *
     * @param code
     * @return
     */
    @POST("user/wxLogin")
    Observable<Result<UserInfo>> wxLogin(@Header("deviceInfo") String deviceInfo, @Query("code") String code,
                                         @Query("parentId") String parentId, @Query("deviceId") String deviceId);

    /**
     * 短信验证码
     *
     * @param tel
     * @return
     */
    @POST("user/msgLogin")
    Observable<Result<String>> getMsgCode(@Query("tel") String tel);

    /**
     * 短信登录
     *
     * @param tel
     * @return
     */
    @POST("user/checkMsg")
    Observable<Result<UserInfo>> msgLogin(@Query("tel") String tel, @Query("code") String code,
                                          @Query("parentId") String parentId, @Query("deviceId") String deviceId,
                                          @Query("hasnew")String hasnew);

    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    @POST("user/getUserInfo")
    Observable<Result<UserInfo>> getUserInfo(@Query("userId") String userId);


    /**
     * 更改头像
     *
     * @param avatar
     * @return
     */
    @POST("user/updateBaseInfo")
    Observable<Result<String>> updateHead(@Query("userId") String userId, @Query("avatar") String avatar);

    /**
     * 更改昵称
     *
     * @param nickName
     * @return
     */
    @POST("user/updateBaseInfo")
    Observable<Result<String>> updateNickName(@Query("userId") String userId, @Query("nickName") String nickName);


    /**
     * 发送手机绑定验证码
     *
     * @param
     * @return
     */
    @POST("user/bindingPhone")
    Observable<Result<String>> bindingPhone(@Query("userId") String userId, @Query("tel") String tel);

    /**
     * 手机绑定验证
     *
     * @param userId id
     * @param tel    手机号
     * @param code   验证码
     * @return
     */
    @POST("user/checkPhoneBindingCode")
    Observable<Result<String>> checkPhoneBindingCode(@Query("userId") String userId, @Query("tel") String tel, @Query("code") String code);

    /**
     * 实名认证
     *
     * @param userId
     * @param realName    真实姓名
     * @param identityNum 身份证号
     * @return
     */
    @POST("user/updateIdentityInfo")
    Observable<Result<String>> updateIdentityInfo(@Query("userId") String userId,
                                                  @Query("realName") String realName,
                                                  @Query("identityNum") String identityNum);

    /**
     * 绑定支付宝账号
     *
     * @param userId
     * @param ZfbAccount
     * @param ZfbName
     * @return
     */
    @POST("user/updateZfbAccount")
    Observable<Result<String>> updateZfbAccount(@Query("userId") String userId,
                                                @Query("ZfbAccount") String ZfbAccount,
                                                @Query("ZfbName") String ZfbName,
                                                @Query("idNum") String idNum);

    /**
     * 获取头像上传地址
     *
     * @param userId
     * @return
     */
    @POST("user/uploadAvatar")
    @Multipart
    Observable<Result<String>> getUploadAvatarUrl(@Query("userId") String userId,
                                                  @Part MultipartBody.Part part);

    /**
     * 绑定微信号
     *
     * @param userId
     * @param code
     * @return
     */
    @POST("user/bindingWx")
    Observable<Result<JsonObject>> bindingWx(@Query("userId") String userId,
                                             @Query("code") String code
    );


    /**
     * 关注列表
     *
     * @param userId
     * @param pageIndex
     * @return
     */
    @POST("user/getSubscribe")
    Observable<Result<List<Follow>>> getSubscribe(@Query("userId") String userId, @Query("pageIndex") int pageIndex);

    /**
     * 粉丝列表
     *
     * @param userId
     * @param pageIndex
     * @return
     */
    @POST("user/getFans")
    Observable<Result<List<Follow>>> getFans(@Query("userId") String userId, @Query("pageIndex") int pageIndex);

    /**
     * 关注/取消关注
     *
     * @param followId
     * @param type     1、关注；2、取消关注
     * @return
     */
    @POST("user/follow")
    Observable<Result<Object>> follow(@Query("followId") Integer followId, @Query("type") Integer type);


    /**
     * 添加任务
     *
     * @param task
     * @return
     */
    @POST("task/add")
    Observable<Result<String>> addTask(@Body AddTask task);

    /**
     * 修改任务
     *
     * @param task
     * @return
     */
    @POST("task/update")
    Observable<Result<String>> updateTask(@Body AddTask task);

    /**
     * 任务详情
     *
     * @param taskId
     * @return
     */
    @GET("task/detail/{taskId}")
    Observable<Result<AddTask>> taskDetail(@Path("taskId") String taskId);

    /**
     * 换一下
     *
     * @return
     */
    @GET("task/randomTask")
    Observable<Result<AddTask>> randomTask(@Query("taskId") String taskId, @Query("index") Integer index);

    /**
     * 报名
     *
     * @param taskId
     * @return
     */
    @GET("task/fetch/{taskId}")
    Observable<Result<String>> fetch(@Path("taskId") String taskId);


    /**
     * 提交任务
     *
     * @param taskId
     * @return
     */
    @POST("task/submit")
    Observable<Result<Object>> submitTask(@Query("taskId") Integer taskId, @Query("content") String content,
                                          @Query("reSubmit") Integer reSubmit);


    /**
     * 报名状态
     *
     * @param taskId
     * @return
     */
    @GET("task/fetch/check/{taskId}")
    Observable<Result<Integer>> fetchCheck(@Path("taskId") String taskId);


    /**
     * 评论列表
     *
     * @param taskId
     * @return
     */
    @GET("task/comment/list/{taskId}")
    Observable<Result<List<Comment>>> commentList(@Path("taskId") String taskId, @Query("size") Integer size, @Query("current") Integer current);

    /**
     * 评论
     *
     * @param comment
     * @return
     */
    @POST("task/comment/add")
    Observable<Result<Object>> addComment(@Body Comment comment);


    /**
     * 获取任务列表
     *
     * @param sortBy     排序规则: 1综合 2人气(成功单数) 3时间最新 4价格最高
     * @param type       详细分类id组: null全部 1简单 2高价
     * @param categoryId 详细分类id all null
     * @param auditFast  极速快审: null非快审 1快审
     * @param size       页面大小
     * @param current    当前页
     * @return
     */
    @GET("task/hall/{sortBy}")
    Observable<Result<List<TaskInfo>>> hallTaskList(@Path("sortBy") int sortBy, @Query("type") Integer type,
                                                    @Query("categoryId") Integer categoryId, @Query("auditFast") Integer auditFast,
                                                    @Query("size") Integer size, @Query("current") Integer current);


    /**
     * 充值
     *
     * @param payType 1、支付宝支付；2、微信支付
     * @param money
     * @param target  target:订单资金目标：2、充值金；3、保证金；4、VIP充值
     * @return
     */
    @POST("user/appPay")
    Observable<Result<AppPayParam>> aliPay(@Query("payType") Integer payType, @Query("money") BigDecimal money, @Query("target") Integer target);


    /**
     * 获取悬赏充值记录
     *
     * @return
     */
    @GET("user/selectUserOrderIn")
    Observable<Result<JsonObject>> selectUserOrderIn(@Query("size") Integer size, @Query("current") Integer current);

    /**
     * 取消充值订单
     *
     * @return
     */
    @GET("user/cancelOrder")
    Observable<Result<JsonObject>> cancelOrder(@Query("orderNum") String orderNum);

    /**
     * 获取任务收支明细
     *
     * @return
     */
    @GET("user/getTaskBillHistory")
    Observable<Result<JsonObject>> getTaskBillHistory(@Query("size") Integer size, @Query("current") Integer current);

    /**
     * 赏金收支明细
     *
     * @return
     */
    @GET("user/getPayBillHistory")
    Observable<Result<JsonObject>> getPayBillHistory(@Query("size") Integer size, @Query("current") Integer current);


    /**
     * 提现
     * 金额目的地target:1赚取金2充值金3保证金4VIP充值10微信11支付宝12赏帮
     * 金额来源地source:1赚取金2充值金3保证金10微信11支付宝12赏帮
     *
     * @param source
     * @param target
     * @param money
     * @return
     */
    @POST("user/withdrawal")
    Observable<Result<Order>> withdrawal(@Query("source") Integer source, @Query("target") Integer target, @Query("money") BigDecimal money);


    /**
     * 购买刷新包
     *
     * @param userId
     * @param money
     * @return
     */
    @GET("user/buyFlush")
    Observable<Result<Flush>> buyFlush(@Query("userId") String userId, @Query("money") BigDecimal money);


    /**
     * 刷新包历史使用记录
     *
     * @param size
     * @param current
     * @return
     */
    @GET("user/getFlushHistory")
    Observable<Result<ResultSet<FlushRecord>>> getFlushHistory(@Query("size") int size, @Query("current") int current);


    /**
     * 获取当日竞价列表
     *
     * @return
     */
    @GET("user/getBidList")
    Observable<Result<List<BiddingUser>>> getBidList(@Query("size") Integer size, @Query("current") Integer current);

    /**
     * 竞拍前四
     *
     * @return 已弃用
     */
    @GET("user/biddingRank4")
    Observable<Result<List<BiddingUser>>> biddingRank4();

    /**
     * 我的竞价信息
     *
     * @return
     */
    @GET("user/getMyBidding")
    Observable<Result<BiddingUser>> getMyBidding();

    /**
     * 我的昨日的竞价信息
     *
     * @return
     */
    @GET("user/getYesterdayBidding")
    Observable<Result<BiddingUser>> getYesterdayBidding();

    /**
     * 更改竞价成功后要展示的任务
     *
     * @param taskId
     * @return
     */
    @GET("task/adsChange/{taskId}")
    Observable<Result<Object>> adsChange(@Path("taskId") Integer taskId);

    /**
     * 参与竞价、追加投注
     *
     * @return
     */
    @GET("user/bidding")
    Observable<Result<PutBidResult>> bidding(@Query("money") BigDecimal money,
                                             @Query("categoryId") Integer categoryId, @Query("name") String name,
                                             @Query("taskId") Integer taskId);


    /**
     * 获取任务管理列表
     *
     * @param state   0待审核1审核通过2审核失败3主动停止任务4库存不足5平台下架
     * @param size
     * @param tid     任务ID
     * @param current
     * @return
     */
    @GET("task/publishList")
    Observable<Result<List<ManagerTask>>> getManagerTaskList(@Query("state") Integer state, @Nullable @Query("tid") Integer tid, @Query("size") Integer size,
                                                             @Query("current") Integer current);


    /**
     * 暂停任务
     *
     * @param taskId
     * @return
     */
    @GET("task/stopOrRestart/{taskId}")
    Observable<Result<Object>> stopOrRestart(@Path("taskId") String taskId);

    /**
     * 增加任务赏金
     *
     * @param taskId
     * @return
     */
    @GET("task/addMoney/{taskId}/{money}")
    Observable<Result<Object>> addTaskMoney(@Path("taskId") String taskId, @Path("money") BigDecimal money);


    /**
     * 增加任务赏金
     *
     * @param taskId
     * @return
     */
    @GET("task/addStock/{taskId}/{count}")
    Observable<Result<Object>> addTaskStock(@Path("taskId") String taskId, @Path("count") int count);


    /**
     * 刷新任务
     *
     * @param taskId
     * @return
     */

    @GET("task/flush/{taskId}")
    Observable<Result<Object>> flushTask(@Path("taskId") String taskId);

    /**
     * 开启首页推荐
     *
     * @param taskId
     * @return
     */
    @POST("task/showHomePage/{taskId}/{time}")
    Observable<Result<Object>> showHomePage(@Path("taskId") String taskId, @Path("time") int time);


    /**
     * 开启快审
     *
     * @param taskId
     * @return
     */
    @GET("task/fast/{taskId}")
    Observable<Result<Object>> fastCheck(@Path("taskId") String taskId);

    /**
     * 审核列表
     *
     * @param taskId
     * @param size
     * @param current
     * @return
     */
    @GET("task/auditList/{taskId}/{state}")
    Observable<Result<List<CheckResult>>> auditList(@Path("taskId") String taskId, @Path("state") Integer state, @Query("size") Integer size,
                                                    @Query("current") Integer current);


    /**
     * 审核任务
     *
     * @param submitId
     * @param reject
     * @param rejectReason
     * @return
     */
    @POST("task/confirm/{submitId} ")
    Observable<Result<Object>> taskCheck(@Path("submitId") String submitId, @Query("reject") boolean reject,
                                         @Query("rejectReason") String rejectReason, @Query("rejectImgs") String rejectImgs);

    /**
     * 获取用户提交的任务数据
     *
     * @param orderId
     * @return
     */
    @GET("task/orderDetail/{orderId}")
    Observable<Result<CheckEntity>> getOrderDetail(@Path("orderId") Integer orderId);

    /**
     * 首页推荐列表
     *
     * @return
     */
    @GET("task/showHomeList")
    Observable<Result<List<TaskInfo>>> getHomeRecommendList();


    /**
     * 获取首页顶部四个广告位
     *
     * @return
     */
    @GET("task/adsList")
    Observable<Result<List<TaskInfo>>> getHomeTops(@Query("userId") String userId);

    /**
     * 获取我的待审核、已通过、未通过任务
     *
     * @return
     */
    @GET("task/orderList/{state}")
    Observable<Result<List<MyTask>>> getOrderList(@Path("state") Integer state, @Query("size") Integer size,
                                                  @Query("current") Integer current);

    /**
     * 取消报名
     *
     * @return
     */
    @GET("task/cancel/{fetchId}")
    Observable<Result<Object>> cancelTask(@Path("fetchId") Integer fetchId);

    /**
     * 获取IM票据
     *
     * @return
     */
    @GET("user/getSign")
    Observable<Result<String>> getIMSign();

    /**
     * 举报
     *
     * @param report
     * @return
     */
    @POST("task/prosecutionLaunch")
    Observable<Result<Object>> prosecution(@Body Report report);

    /**
     * 反驳
     *
     * @param id
     * @return defendantContent
     */
    @POST("task/prosecutionRefute")
    Observable<Result<Object>> prosecutionRefute(@Query("id") Integer id, @Query("defendantContent") String defendantContent);

    /**
     * 取消举报
     *
     * @param id
     */
    @GET("task/prosecutionClose")
    Observable<Result<Object>> prosecutionClose(@Query("id") Integer id);

    /**
     * 举报列表
     *
     * @param isLaunch isLaunch = true 我举报的 isLaunch = false 举报我的
     * @param size
     * @param current
     * @return
     */
    @GET("task/prosecutionList")
    Observable<Result<List<Report>>> prosecutionList(@Query("isLaunch") Boolean isLaunch, @Query("size") Integer size,
                                                     @Query("current") Integer current);

    /**
     * 查询新人任务完成状态
     *
     * @return
     */
    @GET("user/getNewUserGiftStatus")
    Observable<Result<NewcomerState>> getNewUserGiftStatus();

    /**
     * 领取新人福利
     *
     * @param type 1、新人福利；2、用户首次分享；3、完成3个悬赏任务；4、完成一次提现
     * @return
     */
    @POST("user/newUserGift")
    Observable<Result<Object>> newUserGift(@Query("type") Integer type);


    /**
     * shareType:分享类型：1、分享到朋友圈；2、分享给微信好友；3、QQ分享；4、连接分享
     */
    @POST("user/addBehavior")
    Observable<Result<Object>> addUserBehaviorCount(@Query("shareType") Integer shareType);

    /* *
     * 获取用户行为
     * @return
     */
    @POST("user/getTotalTaskBehavior")
    Observable<Result<UserBehavior>> getTotalTaskBehavior();

    /**
     * 获取用户下级好友列表
     *
     * @param friendType:1、一级好友；2、二级好友
     * @return
     */
    @POST("user/getRelationFriend")
    Observable<Result<ResultSet<LevelUser>>> getRelationFriend(@Query("friendType") Integer friendType,
                                                               @Query("friendId") String friendId,
                                                               @Query("size") int size, @Query("current") int current);


    /**
     * 获取推广好友给我带来的收益
     *
     * @return
     */
    @POST("user/getFriendShareCount")
    Observable<Result<FriendMoney>> getFriendShareCount();


    /**
     * 获取在线客服ID
     *
     * @return
     */
    @POST("user/addSingleFriend")
    Observable<Result<String>> addSingleFriend(@Query("serverType") Integer serverType);

    /**
     * 获取app版本信息
     *
     * @return
     */
    @GET("app/lastVersion/{device}")
    Observable<Result<AppVersion>> appLastVersion(@Path("device") Integer device);

    /**
     * 意见反馈
     *
     * @return
     */
    @GET("user/feedback")
    Observable<Result<Object>> feedback(@Query("title") String title, @Query("describe") String describe,
                                        @Query("filePath") List<String> filePath);

    /**
     * 搜索任务
     *
     * @param key
     * @return
     */
    @GET("task/search")
    Observable<Result<List<TaskInfo>>> search(@Query("key") String key, @Query("size") int size, @Query("current") int current);

    /**
     * 用户已发布的任务列表
     *
     * @param userId
     * @return
     */
    @GET("task/pubHistory")
    Observable<Result<List<TaskInfo>>> publishTaskList(@Query("userId") Integer userId, @Query("size") int size, @Query("current") int current);

    /**
     * 系統公告
     *
     * @return
     */
    @GET("user/getSystemNotice")
    Observable<Result<ResultSet<SystemAnnouncement>>> getSystemNotice(@Query("size") int size, @Query("current") int current);


    /**
     * 获取目标用户信息
     *
     * @param subscribeId
     * @return
     */
    @POST("user/getbaseShowInfo")
    Observable<Result<UserFollow>> getUser(@Query("subscribeId") Integer subscribeId);


    /**
     * 获取违规公示信息
     *
     * @return
     */
    @GET("user/getViolateInfo")
    Observable<Result<ResultSet<Violation>>> getViolateInfo(@Query("size") int size, @Query("current") int current);

    /**
     * 绑定我的邀请人
     *
     * @param inviteId
     * @return
     */
    @POST("user/myInvite")
    Observable<Result<Object>> bindMyInvite(@Query("inviteId") Integer inviteId);

    /**
     * 获取每日福利任务
     *
     * @return
     */
    @GET("user/getTodayDailyTask")
    Observable<Result<List<EverydayWelfare>>> getTodayDailyTask();

    /**
     * 领取每日任务奖励
     *
     * @param taskId
     * @return
     */
    @POST("user/getDailyTaskReward")
    Observable<Result<Object>> getDailyTaskReward(@Query("taskId") Integer taskId);

    /**
     * 添加计时器
     *
     * @return
     */
    @POST("task/addTimer")
    Observable<Result<Object>> addTimer(@QueryMap Map<String, Object> map);

    /**
     * 更新计时器
     *
     * @return
     */
    @POST("task/updateTimer")
    Observable<Result<Object>> updateTimer(@QueryMap Map<String, Object> map);

    /**
     * 获取计时器列表
     *
     * @param type    1 推荐计时器 2 刷新计时器
     * @param taskId  任务ID
     * @param size
     * @param current
     * @return
     */
    @GET("task/listTimer")
    Observable<Result<List<Timer>>> getListTimer(@Query("taskId") Integer taskId, @Query("type") Integer type,
                                                 @Query("size") Integer size, @Query("current") Integer current);

    /**
     * 更新计时器状态
     *
     * @param id    0运行状态1停止2删除
     * @param state
     * @return
     */
    @GET("task/updateTimer")
    Observable<Result<Object>> updateTimerState(@Query("id") Integer id,
                                                @Query("state") Integer state);


    /**
     * 下架任务
     *
     * @param taskId
     * @return
     */
    @GET("task/down/{taskId}")
    Observable<Result<Object>> downTask(@Path("taskId") Integer taskId);

    /**
     * 打卡数据信息
     *
     * @return
     */
    @GET("user/getJoinClockChallengeCount")
    Observable<Result<TodayClockParam>> getJoinClockChallengeCount();

    /**
     * 报名打卡挑战
     *
     * @param payType 1、赏金支付；2、余额支付
     * @param money   金额
     * @return
     */
    @GET("user/joinClockChallenge")
    Observable<Result<Object>> joinClockChallenge(@Query("payType") Integer payType, @Query("money") BigDecimal money);

    /**
     * 打卡
     *
     * @return
     */
    @GET("user/clock")
    Observable<Result<Object>> clock();

    /**
     * 我的打卡统计信息
     *
     * @return
     */
    @GET("user/getClockCollection")
    Observable<Result<ClockInfo>> getClockCollection();

    /**
     * 我的打卡记录
     *
     * @return
     */
    @GET("user/getClockList")
    Observable<Result<ResultSet<ClockRecord>>> getClockList(@Query("size") Integer size, @Query("current") Integer current);

    /**
     * 发红包
     *
     * @param taskId 任务ID
     * @param price  红包单价
     * @param stock  红包数量
     * @return
     */
    @POST("task/redPacket")
    Observable<Result<Object>> sendRedPack(@Query("title") String title, @Query("taskId") Integer taskId,
                                           @Query("price") BigDecimal price, @Query("stock") Integer stock);

    /**
     * 红包列表
     *
     * @return
     */
    @GET("task/listRedPacket")
    Observable<Result<List<RedPackDetails>>> getListRedPack(@Query("size") Integer size, @Query("current") Integer current);

    /**
     * 开红包
     *
     * @return
     */
    @GET("task/pullRedPacket")
    Observable<Result<RedPackItem>> pullRedPacket(@Query("taskId") Integer taskId);

    /**
     * 红包领取列表
     *
     * @return
     */
    @GET("task/listPullHistory")
    Observable<Result<List<RedPackItem>>> listPullHistory(@Query("taskId") Integer taskId);

    /**
     * 红包领取状态
     *
     * @return
     */
    @GET("task/queryPullState ")
    Observable<Result<Integer>> queryPullState(@Query("taskId") Integer taskId);


    /**
     * 获取奖励阶段信息
     *
     * @param rankType: 1、推广；2、赚钱；3、游戏
     * @return
     */
    @GET("user/getStageInfo ")
    Observable<Result<List<Reward>>> getStageInfo(@Query("rankType") Integer rankType);

    /**
     * 用户阶段奖励信息
     *
     * @param type :1、推广奖励信息；2、赚钱奖励信息；3、游戏奖励信息
     * @return
     */
    @GET("user/rankAgentInfo ")
    Observable<Result<Object>> rankAgentInfo(@Query("type") Integer type);

    /**
     * 领取奖励
     *
     * @param rewardType: 1、推广奖励；2、赚钱奖励；3、游戏奖励
     * @return
     */
    @GET("user/getRankReward ")
    Observable<Result<Object>> getRankReward(@Query("rewardType") Integer rewardType);

    /**
     * 快捷审核通过任务
     *
     * @param id
     * @return
     */
    @GET("task/auditAgain ")
    Observable<Result<Object>> auditAgain(@Query("id") Integer id);

    /**
     * 将任务收入转为悬赏余额
     *
     * @return
     */
    @GET("user/earnToPay")
    Observable<Result<Object>> earnToPay();

    /**
     * 账户余额充值vip
     *
     * @param payType：支付方式：1、赏金支付；2、余额支付
     * @param vipLevel:vip等级：1、月卡；2、季卡   3、年卡  100、体验卡
     * @return
     */
    @GET("user/balanceToVip")
    Observable<Result<Object>> balanceToVip(@Query("payType") Integer payType, @Query("vipLevel") Integer vipLevel);


    /**
     * PC
     *
     * @return
     */
    @GET("task/pcToken")
    Observable<Result<Object>> pcToken();


    /**
     * 查询红包详情
     *
     * @return
     */
    @GET("task/queryRedPacket")
    Observable<Result<RedPackDetails>> queryRedPacket(@Query("taskId") Integer taskId);


    /**
     * 获取题目列表
     *
     * @return
     */
    @GET("user/getQuestionList")
    Observable<Result<List<Subject>>> getQuestionList();


    /**
     * 删除超时任务
     *
     * @return
     */
    @GET("task/deleteOrder/{orderId}")
    Observable<Result<Object>> deleteOrder(@Path("orderId") Integer orderId);


    /**
     * 店铺统计数据
     *
     * @return
     */
    @POST("user/getShopInfo")
    Observable<Result<ShopInfo>> getShopInfo(@Query("userId") Integer userId);


    /**
     * 获取游戏数据
     *
     * @return
     */
    @GET("task/game/list")
    Observable<Result<ResultSet<Game>>> getGames(@Query("size") Integer size, @Query("current") Integer current);


    /**
     * 获取首页广告位
     *
     * @return
     */
    @GET("task/banner/list")
    Observable<Result<ResultSet<AdBanner>>> getBanner(@Query("tag") Integer tag, @Query("size") Integer size, @Query("current") Integer current);


    /**
     * 获取最后提交的任务信息
     *
     * @return
     */
    @GET("task/lastSubmitOrder")
    Observable<Result<CheckEntity>> lastSubmitOrder(@Query("taskId") String taskId);


    /**
     * 悬赏大厅任务随机推荐
     *
     * @return
     */
    @GET("task/randomHomePageList")
    Observable<Result<List<TaskInfo>>> randomHomePageList();


    /**
     * 更改支付宝账号
     *
     * @return
     */
    @GET("user/changeZfbAccount")
    Observable<Result<Object>> changeZfbAccount(@Query("account") String account);


    /**
     * 账号密码登录
     *
     * @return
     */
    @GET("user/loginForWeb")
    Observable<Result<UserInfo>> loginForWeb(@Query("account") String account,
                                             @Query("credentials") String credentials,
                                             @Query("appKey") String appKey);


    /**
     * 检查是否接取过同名的任务
     * 0不存在同名情况, 1存在没处理的同名任务, 无法报名, 2存在处理过的同名任务, 可能会被骗单, 弹出提示
     *
     * @return
     */
    @GET("task/checkOrderByTaskName/{taskId}")
    Observable<Result<Integer>> checkOrderByTaskName(@Path("taskId") String taskId);


    /**
     * 根据订单ID查询任务
     *
     * @param orderId
     * @return
     */
    @GET("task/queryTaskByOrderId/{orderId}")
    Observable<Result<Task>> queryTaskByOrderId(@Path("orderId") String orderId);


    /**
     * 获取自动回复的问题和答案
     *
     * @return
     */
    @GET("user/problems")
    Observable<Result<Map<String, String>>> getAutoReply();


    /**
     * 获取信誉积分明细
     *
     * @return
     */
    @GET("user/getScoreChangeInfo")
    Observable<Result<ResultSet<ReputationDetailed>>> getScoreChangeInfo(@Query("size") Integer size, @Query("current") Integer current);


    /**
     * 批量审核
     *
     * @param batchCheck
     * @return
     */
    @POST("task/batchConfirm")
    Observable<Result<Integer>> batchConfirm(@Body BatchCheck batchCheck);

    /**
     * 数据导出
     *
     * @param taskId
     * @param start
     * @param end
     * @return
     */
    @GET("task/successDataToExcel")
    Observable<Result<Object>> successDataToExcel(@Query("taskId") Integer taskId,
                                                  @Query("start") String start, @Query("end") String end);


    /**
     * 导出的数据信息
     *
     * @param taskId
     * @return
     */
    @GET("task/exportInfo")
    Observable<Result<JSONObject>> exportInfo(@Query("taskId") Integer taskId);


    /**
     * 待审核的任务的用户，是否
     *
     * @param orderId
     * @return
     */
    @GET("task/succeedTheSameTask/{orderId}")
    Observable<Result<Integer>> succeedTheSameTask(@Path("orderId") Integer orderId);

    /**
     * 查询该用户该任务的全部订单
     *
     * @param userId
     * @return
     */
    @GET("task/allOrder")
    Observable<Result<List<TaskOrder>>> userAllOrder(@Query("taskId") Integer taskId,
                                                     @Query("userId") Integer userId,
                                                     @Query("orderId") Integer orderId);

    /**
     * 删除下架任务
     *
     * @param taskId
     * @return
     */
    @GET("task/deleteDown/{taskId}")
    Observable<Result<Object>> deleteDown(@Path("taskId") Integer taskId);


    /**
     * 获取排行榜信息
     *
     * @param rankType   : 1、推广；2、悬赏；3、游戏；4、提现
     * @param rankPeriod : 排行榜期数：1、本期；2、上期
     */
    @GET("user/getRankList")
    Observable<Result<List<JSONObject>>> getRankList(@Query("rankType") Integer rankType, @Query("rankPeriod") Integer rankPeriod);

    /**
     * 获取用户排行榜信息
     *
     * @param rankType : 1、推广；2、悬赏；3、游戏；4、提现
     */
    @GET("user/getUserRankInfo")
    Observable<Result<JSONObject>> getUserRankInfo(@Query("rankType") Integer rankType);

    /**
     * 获取用户排行榜信息
     *
     * @param rankType : 1、推广；2、悬赏；3、游戏；4、提现
     */
    @GET("user/v2/getUserRankInfo")
    Observable<Result<JSONObject>> getV2UserRankInfo(@Query("rankType") Integer rankType);

    /**
     * 领取好友提现阶段奖励
     *
     * @param stageNum ： 领取的是那个阶段(1~12)
     */
    @GET("user/getStageReward")
    Observable<Result<Object>> getStageReward(@Query("stageNum") Integer stageNum);


    /**
     * 继续举报
     *
     * @param prosecutionId
     * @param content
     * @return
     */
    @POST("task/reSubmitContent")
    Observable<Result<Object>> reSubmitReport(@Query("prosecutionId") Integer prosecutionId, @Query("content") String content);

    /**
     * 继续辩诉
     *
     * @param prosecutionId
     * @param content
     * @return
     */
    @POST("task/reRefuteContent")
    Observable<Result<Object>> reRefuteContent(@Query("prosecutionId") Integer prosecutionId, @Query("content") String content);

    /**
     * 举报详情
     *
     * @param prosecutionId
     * @return
     */
    @GET("task/prosecutionDetail")
    Observable<Result<JSONObject>> prosecutionDetail(@Query("prosecutionId") Integer prosecutionId);


    /**
     * 获取排行榜信息
     *
     * @param rankType   : 1、推广；2、悬赏；3、游戏；4、提现
     * @param rankPeriod : 排行榜期数：1、本期；2、上期
     */
    @GET("user/getNewRankList")
    Observable<Result<JSONObject>> getNewRankList(@Query("rankType") Integer rankType, @Query("rankPeriod") Integer rankPeriod);


    /**
     * 微信、支付宝开关配置
     *
     * @return
     */
    @GET("task/switch")
    Observable<Result<JSONObject>> getConfig();

    /**
     系统配置
     任务大奖 -> 规则 TaskRule
     任务大奖 -> 赚钱奖励 TaskReward
     发布/管理任务 --> 发布 --> 发布规则  PublicRule
     发布/管理任务 --> 发布 --> 下载软件 -> 提示 PublicRewardRule
     推广奖励 --> 上期榜单 --> 赚钱奖励 OldTaskReward
     推广奖励 --> 上期榜单 --> 游戏奖励 OldGameReward
     推广奖励 --> 上期榜单 --> 推广奖励 OldAgentReward
     我的 --> 开通会员 MemberTab
     任务大奖 --> 游戏奖励 GameReward
     推广奖励 --> 裂变奖励 FriendStageReward
     推广奖励 --> 推广奖励 AgentReward
     */
    @GET("user/getSystemConfig/{type}")
    Observable<Result<JSONObject>> getSystemConfig(@Path("type") String type);


    /**
     * 获取排行榜信息
     *
     * @param rankType   : 1、推广；2、悬赏；3、游戏；4、提现
     * @param rankPeriod : 排行榜期数：1、本期；2、上期
     */
    @GET("user/newRank")
    Observable<Result<JSONObject>> getNewRank(@Query("rankType") Integer rankType, @Query("rankPeriod") Integer rankPeriod);

    /**
     * 悬赏大厅列表新接口
     */
    @GET("task/hallList")
    Observable<Result<List<TaskInfo>>> hallList(@Query("sortBy") int sortBy,
                                                @Query("categoryId") Integer categoryId,@Query("size")int size, @Query("current") int current);



    /**
     *  获取金额提现\充值开关状态：/user/sys/specifyConfig get请求
     *  参数：type 1任务金额提现 2悬赏金额提现 3保证金提现 4VIP充值 5悬赏金额充值 6保证金充值
     *  返回参数：alipay 支付宝
     *  wechat 微信
     *
     */
    @GET("user/sys/specifyConfig")
    Observable<Result<JSONObject>> specifyConfig(@Query("type") int type);


}